ReactNative之痛和希望

去年上半年,突发奇想觉得能做一个自己用的APP是一件很酷的事情;
当时我需要一能够记账的APP,详细来说不仅需要记账,还需要很多其他的财务功能,比如:

  • 能够动态监控个人资产情况(股票市值,房地产市值,汇率)
  • 能够对比个人和社会整体CPI来给出消费建议和所处的层次
  • 能够进行日常记账,并能够给出同比环比的收入和支出
  • 在月末和年末的时候能够给出账单

根据上面这四个需求,我开始了独立制作APP的旅程

在只有我一个人的业余时间的情况下,应该选择一种解决方案能够在iOS和Android同时运行;

ReactNative闪亮登场。

在真正开始写之前真是有很多东西要学

  • JavaScript
  • css排版

好不容易写了一个最基本的APP出来,有界面有数据传输也有server端
在写的过程中,很多问题涌现了出来

调试不方便

调试使用Safari的console日志,这种调试方式实在是折磨人
一方面需要在iOS simulator上按cmd+R来重启应用,一方面要调到Safari页面看日志;
可以想象,为了调试一个稍微复杂的bug,通常需要开几十个Safari的窗口。

版本兼容性问题

在写应用的过程中,版本兼容问题曾经一度让我想放弃写APP,这个问题比调试问题更折磨人
好几个晚上我都在解决这种版本兼容问题或者框架本身的bug
由于ReactNative和原生系统的交互方式,使得这种问题或者bug直接封死普通开发人员的路,普通开发人员压根就不能解决这种问题,只能求助社区。
翻开社区的issue列表,发现好多人都遇到这种问题,实在是让人心累

有很多SDK本身是没有ReactNative版本的,需要通过link的方式将原生版本的SDK连接进项目来。
这个时候就折磨人了,有的依赖可以很舒服的link进来,有的则需要pod install,当然就有怎么也link不进来的包,
遇到这种包就更烦人了,你只能不断尝试搜索引擎给出的各种方法,期望自己运气好。

从来没有觉得APP的导航如此复杂

复杂到以至于ReactNative官方文档都没有一个导航的解决方案,而是推荐一个第三方的解决方案https://reactnavigation.org/
这个第三方库也是有各种各样的问题,要么就是嵌套的导航不能按照预期工作,要不就是有bug,导航参数传不过去。

且这个导航的复杂程度不能想象,但凡有第二个方案都不会使用这个组件,尤其是在和其他组件,比如redux之类的组件集成的时候,你都找不到一个合适的sample,好不容易碰出一个能够工作代码,千万要git commit一下以防一不小心丢失了这一宝贵的状态,而且之后的开发一定不要碰这段代码,否则你可能两个晚上的时间都得搭进去了。

柳暗花明

在经历一段痛苦的时期之后,我一度要放弃继续写这个APP。
但是此时我发现了两个好东西,一个是firebase,一个是expo。

expo

expo是基于ReactNative的一套工具包,包含多种多样的开发便利和集成的SDK。
比如鉴权,之前google的鉴权我花了好多时间来调试,克服各种问题才把google登录集成进去APP;
然而在用来expo之后,只需要半个小时我就把google登录集成进去APP了,又花了另外半个小时来集成facebook的登录。

firebase

第二个发现就是firebase,这个发现是在是个好东西,因为firebase不仅包含数据库还包含计算,也有鉴权,是在是方便的不得了。
之前的APP后端完全是自己写的,然后部署在google appengine上,数据库使用google的cloud storage。鉴权的部分要自己开发逻辑,这一整套的的APP后端逻辑写下来到调试成功都至少要3-5个晚上。
然后在使用了firebase之后,这些过程就是在太舒服了,数据库和firebase的函数功能都极大的方便了开发,使得整个过程用不了一个晚上就能搞定。

重构

基于上述发现,我重构了整个APP,https://play.google.com/store/apps/details?id=com.yilemoney ,之后使用ReactNative开发APP一定首选firebase+expo

  • 以上描述均出自个人经验

听说flutter已经release 1.0了